package com.hengpeng.itfin.service.account;

import java.util.List;

import com.hengpeng.itfinbase.en.TradeMode;
import com.hengpeng.itfinbase.en.TransType;
import com.hengpeng.itfinbase.persist.Account;

/**
 * <pre>
 * 资金账户,资金日志服务类
 * </pre>
 * 
 * @author weiyuan
 * @version 1.0, 2015年5月30日
 */
public interface AccountService {
    /**
     * 更新账户
     * 
     * @param account
     * @return
     */
//    public int updateAccount(Account account);

    /**
     * <pre>
     * 用户资金账户交易变动：加钱,减钱,冻结,解冻
     * </pre>
     * 
     * @param userId
     *            用户id
     * @param totalMoney
     *            交易总金额
     * @param baseMoney
     *            交易金额中本金金额
     * @param interestMoney
     *            交易金额中利息金额
     * @param transType
     *            交易业务类型
     * @param tradeMode
     *            交易模式
     * @param referenceId
     *            关联业务id
     * @param remark
     *            备注
     */
//    public void changeAccountMoney(Long userId, Long totalMoney, Long baseMoney, Long interestMoney,
//            TransType transType, TradeMode tradeMode, String referenceId, String remark);

    /**
     * <pre>
     * 用户资金账户交易变动：加钱,减钱,冻结,解冻
     * </pre>
     * 
     * @param userId
     *            用户id
     * @param money
     *            交易金额
     * @param transType
     *            交易业务类型
     * @param tradeMode
     *            交易模式
     * @param referenceId
     *            关联业务id
     * @param remark
     *            备注
     */
//    public void changeAccountMoney(Long userId, Long money, TransType transType, TradeMode tradeMode,
//            String referenceId, String remark);

    /**
     * <pre>
     * 放款操作资金账户
     * </pre>
     * 
     * @param userId
     * @param totalMoney
     * @param baseMoney
     * @param interestMoney
     * @param transType
     * @param tradeMode
     * @param referenceId
     * @param remark
     * @param addTotal
     */
    public void loansChangeAccountMoney(Long userId, Long totalMoney, Long baseMoney, Long interestMoney,
            TransType transType, TradeMode tradeMode, String referenceId, String remark, boolean addTotal);

    /**
     * <pre>
     * 资金账户查询
     * </pre>
     * 
     * @param userId
     * @return
     */
    public Account getAccount(Long userId);

    /**
     * 根据用户组获取用户账户
     * 
     * @param userIds
     * @return
     */
    public List<Account> getAccounts(Long[] userIds);

    /**
     * <pre>
     * 用户资金账户交易变动：加钱,减钱,冻结,解冻
     * </pre>
     * 
     * @param userId
     *            用户id
     * @param totalMoney
     *            交易金额
     * @param baseMoney
     *            余额
     * @param interestMoney
     * 
     * @param feeAmt
     *            手续费
     * @param transType
     *            交易业务类型
     * @param tradeMode
     *            交易模式
     * @param referenceId
     *            关联业务id
     * @param remark
     *            备注
     */
    public void changeAccountMoney(Long userId, Long totalMoney, Long baseMoney, Long interestMoney, Long feeAmt,
            TransType transType, TradeMode tradeMode, String referenceId, String remark);

}
